package ar.republicagroup.gestion.util.exportar;

import ar.republicagroup.gestion.entities.Cheque;
import ar.republicagroup.gestion.entities.ChequePenalizacion;
import ar.republicagroup.gestion.services.ChequeEstadoServices;
import ar.republicagroup.gestion.services.ChequePenalizacionServices;
import ar.republicagroup.gestion.services.LiquidacionServices;
import ar.republicagroup.gestion.util.SpringUtils;
import ar.republicagroup.gestion.util.exportar.beans.ChequeBean;
import ar.republicagroup.gestion.util.exportar.beans.LiquidacionBean;
import ar.republicagroup.gestion.util.helpers.Formato;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author DIEGOALV
 * @since 2013-11-02
 */
public class ReportModel {
    
    
    static Logger log = Logger.getLogger(ReportModel.class);
    static ChequePenalizacionServices penalizacionServices = (ChequePenalizacionServices)SpringUtils.getBean("chequePenalizacionServices");
    
    
    /**
     * Genera el bean de Liquidacion que va a ser enviado a Exportar.toPDF como parámetro de datos. 
     * Crea dos listados de tipo ChequeBean donde mete cheque rechazados o pendientes que son el detalle del reporte.
     * Esos dos List<ChequeBean> son properties de LiquidacionBean .
     * @param chequeList, el listado de todos los cheques de la liquidación que se va a exportar
     * @return retorna un List<LiquidacionBean> que contiene el detalle de la liquidación .
     */
    public static List<LiquidacionBean> reporteDeLiquidacion(List<Cheque> chequeList){
        
        LiquidacionBean liquidacionBean         = new LiquidacionBean();
        List<ChequeBean> chequesRechazadosList  = new ArrayList<>();
        List<ChequeBean> chequesPendientesList  = new ArrayList<>();
        
        log.info("Generando reporte de liquidacion...");
        
        for(Cheque cheque:chequeList){
            /*Metemos todos los cheques por rechazo en  chequesRechazadosList */
           if((cheque.getChequeEstadoId().getId() != LiquidacionServices.CHEQUE_LIQUIDADO) && (cheque.getChequeEstadoId().getId() != LiquidacionServices.CHEQUE_INGRESADO) && (cheque.getChequeEstadoId().getId() != ChequeEstadoServices.CHEQUE_PENDIENTE) )
                {
                    log.info("Agregando cheque rechazado al reporte "+cheque.getChequeNro());
                    ChequeBean chequeRechazo = new ChequeBean();
                    chequeRechazo.setChequeNro(cheque.getChequeNro());
                    chequeRechazo.setBanco(cheque.getBancoId().getNombre());
                    chequeRechazo.setImporte(Formato.decimalComaMiles(cheque.getImporte().doubleValue()));
                    ChequePenalizacion gasto = penalizacionServices.getChequePenalizacionByChequeEstado(cheque.getChequeEstadoId());
                    chequeRechazo.setGasto(Formato.decimalComaMiles(gasto.getComision()));
                    chequesRechazadosList.add(chequeRechazo);
                }
        
            /*Metemos también todos los cheques pendientes en chequesPendientesList */
            if(cheque.getChequeEstadoId().getId() == ChequeEstadoServices.CHEQUE_PENDIENTE){
                    log.info("Agregando cheque pendiente al reporte "+cheque.getChequeNro());
                    ChequeBean chequePendiente = new ChequeBean();
                    chequePendiente.setChequeNro(cheque.getChequeNro());
                    chequePendiente.setBanco(cheque.getBancoId().getNombre());
                    chequePendiente.setImporte(Formato.decimalComaMiles(cheque.getImporte().doubleValue()));
                    chequesPendientesList.add(chequePendiente);
            }  
    
        }
    
        /*Cada List<ChequeBean> es un property de LiquidacionBean así que se lo seteamos para luego obtenerlo desde iReport */
        liquidacionBean.setRechazos(chequesRechazadosList); 
        liquidacionBean.setPendientes(chequesPendientesList);
        return Arrays.asList(liquidacionBean);
    
    }
    
}